PROGRAMACIÓN
RELACIONAL

“La motivación más importante en el trabajo de investigación que culminó en el modelo relacional fue el objetivo de trazar una frontera clara y nítida entre los aspectos lógico y físico de la gestión de base de datos” (Edgar Frank Codd)



El Paradigma Relacional

El concepto de relación

El modelo relacional, desarrollado por Edgar Frank Codd [1970], se basa en elementos llamados “relaciones”. Una relación es una tabla bidimensional. La dimensión horizontal corresponde a diferentes entidades. La dimensión vertical corresponde a un conjunto de atributos de esas entidades. Por ejemplo, la relación Empleados, que corresponde a un conjunto de empleados de una empresa expresada en forma de tabla, en donde las filas son los empleados, y las columnas son atributos de esos empleados:

EmpleadoNombreApellido1Apellido2Ciudad
E001JuanPérezGómezMadrid
E002LuisFernándezPinBarcelona
E003PedroRuizLlamasValencia
E004RamónRuizRodríguezAlicante

Formalmente, una relación R definida sobre los atributos A1, ... , Am de una cierta clase de entidades es un subconjunto del producto cartesiano de los dominios de esos atributos. en donde Dom(Ai) es el conjunto de posibles valores del atributo Ai.

Esta relación se puede representar como la tabla bidimensional genérica:

EntidadAtributos
A1...Am
1V11...V1m
............
nVn1...Vnm

siendo: Una relación es, pues, un conjunto de tuplas.

El orden de las tuplas en una relación es irrelevante, puesto que cada fila corresponde a una entidad diferente. También es irrelevante el orden de las columnas, puesto que cada una lleva asociada el nombre del atributo correspondiente.

En una relación, un atributo clave o primario (o, simplemente, clave) es un atributo cuyo valor es único para cada entidad. En el caso de la relación Empleados, la clave es Empleado. La clave de una relación también podría ser una concatenación de atributos (se habla, en este caso, de una clave compuesta o superclave).

Un conjunto de relaciones (tablas), interrelacionadas a través de atributos comunes, constituye una base de datos relacional (BDR). Por ejemplo, además de la tabla anterior (Empleados), podría existir otra tabla de Ciudades con diferentes atributos (Población, etc.). Ambas tablas quedarían implícitamente enlazadas a través del atributo común Ciudad. Por ejemplo,

CiudadPoblación
(millones)
Madrid5
Barcelona3
Valencia2
Sevilla1

Obsérvese que en esta tabla no aparece Alicante (que sí aparecía en la tabla Empleados), pero aparece Sevilla.

Un atributo de una relación que no es clave en una relación puede ser clave de otra. Por ejemplo, el atributo Ciudad no es clave de la relación Empleados, pero es clave en la relación Ciudades. Se dice que Ciudad es una clave ajena (foreign) en Empleados.

Un valor Null (nulo) significa que el valor es desconocido o que no existe. Todas las operaciones que involucren a Null son falsas por definición.

Un valor es atómico si no puede subdividirse en valores más pequeños. Por ejemplo, la edad de una persona en años es un valor atómico. El concepto de atomicidad es relativo, pues un valor puede considerarse atómico o compuesto, según el propósito.


Álgebra relacional

El modelo relacional se basa en un conjunto de operaciones básicas, que constituyen la llamada “álgebra relacional”. Se trata de un conjunto de operaciones que actúan sobre relaciones y que producen una relación como resultado. Las operaciones básicas son 5:
  1. Unión de dos relaciones R1 y R2.

    R1R2 = conjunto de tuplas que pertenecen a R1, a R, o a ambas.

    Las relaciones R1 y R2 deben ser compatibles, es decir, deben estar definidas sobre el mismo conjunto de atributos.

  2. Diferencia de dos relaciones R1 y R2.

    R1R2 = conjunto de tuplas de R1 que no pertenecen a R2.

    Como en el caso anterior, las relaciones deben ser compatibles.

  3. Producto cartesiano de dos relaciones R1 (de grado m1) y R2 (de grado m2).

    R1×R2 = conjunto de todas las posibles tuplas en las que los m1 primeros elementos constituyen una tupla de R1 y los m2 últimos una tupla de R2. Es decir, se concatenan cada una de las filas de R1 con cada una de las filas de R2. La nueva relación es de grado m1+m2 y de cardinalidad m1×m2.

    Esta definición es una variante del producto cartesiano clásico.

  4. Proyección de una relación R.

    Es una selección de columnas de la tabla.

    Si A es el conjunto de los atributos sobre la que está definida la relación R y BA es un subconjunto de A (una selección de columnas), ΠB(R) es otra relación con las mismas tuplas que R, pero considerando sólo los atributos especificados en B y eliminando las tuplas duplicadas.

    Por ejemplo,
    Π{Nombre, Apellido1}(Empleados)
    produce una nueva relación con solo las columnas correspondientes a los atributos especificados (Nombre y Apellido1) y eliminando las tuplas duplicadas.

    NombreApellido1
    JuanPérez
    LuisFernández
    PedroRuiz
    RamónRuiz

  5. Selección de una relación R.

    Es otra relación en la que se seleccionan las tuplas de R que cumplan un criterio de selección F. La notación es σF(R).

    El criterio de selección F se define mediante una fórmula construida con operandos (nombres de atributos o constantes), operadores de comparación (>, <, etc.) y operadores lógicos clásicos (o, y, no: ∨, ∧, ¬).

    Por ejemplo,
    σApellido1=Ruiz(Empleados)
    produce una relación de dos filas:

    EmpleadoNombreApellido1Apellido2Ciudad
    E003PedroRuizLlamasValencia
    E004RamónRuizRodríguezAlicante

    Otro ejemplo, sería σ(Apellido1=Ruiz ∧ Ciudad=Barcelona)(Empleados) que produciría la relación vacía (el conjunto vacío).
Se demuestra que este conjunto de operaciones básicas es completo [Codd, 1972], pudiéndose combinar estas operaciones para construir operaciones derivadas.


Operaciones derivadas

Con el objeto de facilitar la especificación de las expresiones del álgebra relacional, se definen 7 operaciones derivadas adicionales [Korth & Silberschatz, 1993], (que junto con las 5 básicas, dan un total de 12 operaciones):
  1. Intersección de dos relaciones R1 y R2.

    Las relaciones R1 y R2 deben ser compatibles. La intersección equivale a la operación definida en teoría de conjuntos. Se define a partir de la operación básica diferencia:


  2. Unión natural (natural join) de dos relaciones R1 y R1, simbolizado por R1 |×| R2).

    Es una concatenación a nivel columnas basada en valores iguales en columnas comunes. Tiene la forma σF(R1×R2) en donde F es una fórmula que indica esos valores iguales en columnas comunes.

    Por ejemplo, la unión natural de Empleados |×| Ciudades produce la tabla siguiente:

    EmpleadoNombreApellido1Apellido2CiudadPoblación
    E001JuanPérezGómezMadrid5
    E002LuisFernándezPinBarcelona3
    E003PedroRuizLlamasValencia2

    Obsérvese que el empleado E004 no aparece porque Alicante no se encuentra en Ciudades.

  3. Unión exterior (Outer Join).

    Es una extensión de la unión natural que evita la pérdida de información. A los valores no existentes se les asigna el valor Null (nulo). Existen tres tipos:

    1. R1 ]×| R2 (unión exterior por la izquierda).
      Se tienen en cuenta las filas del primer operando.

    2. R1 |×[ R2 (unión exterior por la derecha).
      Se tienen en cuenta las filas del segundo operando.

    3. R1 ]×[ R2 (unión exterior completa).
      Se tienen en cuenta las filas de ambos operandos.

    En el caso de Empleados y Ciudades, tenemos:

    1. Empleados ]×| Ciudades:

      EmpleadoNombreApellido1Apellido2CiudadPoblación
      millones)
      E001JuanPérezGómezMadrid5
      E002LuisFernándezPinBarcelona3
      E003PedroRuizLlamasValencia2
      E004RamónRuizRodríguezAlicanteNull

    2. Empleados |×[ Ciudades:

      EmpleadoNombreApellido1Apellido2CiudadPoblación
      millones)
      E001JuanPérezGómezMadrid5
      E002LuisFernándezPinBarcelona3
      E003PedroRuizLlamasValencia2
      NullNullNullNullSevilla1

    3. Empleados ]×[ Ciudades:

      EmpleadoNombreApellido1Apellido2CiudadPoblación
      millones)
      E001JuanPérezGómezMadrid5
      E002LuisFernándezPinBarcelona3
      E003PedroRuizLlamasValencia2
      E004RamónRuizRodríguezAlicanteNull
      NullNullNullNullSevilla1

  4. División de dos relaciones R1 y R2.

    Para realizar la operación, se deben cumplir dos condiciones:

    1. grado(R1) > grado(R2).

    2. El conjunto de atributos C de R2, A(R2), debe estar incluido en los atributos de R1, A(R1), es decir, A(R2) ⊂ A(R1).

    R1÷R2 se define a partir de las operaciones de producto cartesiano, diferencia y proyección. Su definición formal es:


    R1÷R2 define una nueva relación sobre el subconjunto A(R1)−A(R2) de atributos de R1. Contiene los valores de estos atributos que en las tuplas de R1 están combinadas con cada una de las tuplas de R2.

    Por ejemplo, Empleados÷Ciudades produce una relación en la que no aparece la columna Ciudad, ni tampoco aparece el empleado E004 porque Alicante no aparece en la tabla de Ciudades.

    EmpleadoNombreApellido1Apellido2
    E001JuanPérezGómez
    E002LuisFernándezPin
    E003PedroRuizLlamas

  5. Asignación.

    Se da un nombre a una expresión relacional del álgebra relacional:


    El nombre se usa en subsiguientes expresiones relacionales. Por ejemplo, T ← ΠB(R1R2)

  6. Renombrar.

    Se expresa mediante ρX(A1,...,An)(E) e indica renombrar la expresión relacional E como X, y renombrar también los atributos como A1, ..., An.

  7. Actualización.

    Permite actualizar un valor de una tupla de una relación R: σF(R) ← E, en donde E es una expresión relacional.

    Con estas operaciones adicionales tenemos un verdadero lenguaje procedimental. Por ejemplo, para añadir y eliminar una expresión relacional E a la relación R, se realiza respectivamente mediante


El lenguaje SQL

SQL (Structured Query Language) es el lenguaje estándar de acceso a las bases de datos relacionales. Se trata de un lenguaje de alto nivel de cuarta generación (4GL), de tipo declarativo (no procedimental), simple de utilizar, basado en el álgebra relacional.

SQL tiene también cuatro operaciones básicas: INSERT, SELECT, UPDATE y DELETE, para insertar, seleccionar, actualizar y eliminar filas, respectivamente. La forma de la sentencia de consulta es El resultado es una subtabla, en el que se han seleccionado filas y columnas.

El SQL puede ser interactivo o no interactivo. El SQL interactivo es adecuado para definir la estructura de una base de datos, realizar consultas y crear prototipos. El SQL no interactivo es un SQL embebido en un lenguaje de programación, y puede ser estático o dinámico. En el dinámico pueden utilizarse variables.

En nuestro ejemplo de Empleados: El resultado es:

EmpleadoCiudad
E003Valencia
E004Alicante

Bases de datos multidimensionales

Las relaciones (tablas) son bidimensionales, pues relacionan dos dimensiones: filas (entidades) con columnas (atributos de esas entidades). Pero pueden existir relaciones de más de dos dimensiones. Por ejemplo, las ventas de productos fabricados por una empresa, con los atributos de: producto, zona y año de venta. En este caso no tenemos una tabla bidimensional, sino una tabla de tres dimensiones (o cubo), siendo las dimensiones: Producto, Zona y Año.

Cada dimensión tiene una clave identificativa. En el caso de la tabla Empleados (2D), las claves identificativas son Empleado y Atributo. En el caso de la tabla de ventas de productos (3D), las claves son Producto, Zona y Año. Si consideramos el número de trimestre del año (un valor entre 1 y 4), tendríamos 4 dimensiones (un hipercubo): Producto, Zona, Año y Trimestre.


Triggers (Disparadores)

Son procedimientos que se ejecutan cuando ocurre un evento previamente especificado. Los eventos son las operaciones de inserción (INSERT), eliminación (DELETE) y actualización (UPDATE) de filas. Un trigger se puede ejecutar antes o después de que se modifiquen los datos.

Los triggers se usan para:
OLAP (Online Analytical Processing)

Es una técnica de análisis en tiempo real de una base de datos para buscar o descubrir tendencias o patrones ocultos. Es la llamada “minería de datos” (data mining). Puede implicar millones de registros con varios gigabytes de ocupación. En general, las operaciones son solo de lectura.

El sistema permite la exploración selectiva de los datos y responde a consultas de manera suficientemente rápida. Permite a los usuarios extraer datos fácilmente de forma selectiva y verlos desde diferentes puntos de vista. Para facilitar este tipo de análisis, los datos OLAP se almacenan en una base de datos multidimensional de alto rendimiento. OLAP se utiliza en el campo llamado “Business Intelligence”, cuyo objetivo es agilizar la consulta de grandes bases de datos de una empresa para facilitar la toma de decisiones.

Puesto que las aplicaciones OLAP utilizan bases de datos multidimensionales, también se denominan MOLAP (Multidimensional OLAP). Este término se utiliza para diferenciarlo de otros tipos de OLAP como ROLAP (OLAP Relacional) y HOLAP (OLAP híbrido, que combina MOLAP y ROLAP).

En ROLAP, toda la información del cubo, sus datos, sus sumas, etc., se almacenan en una base de datos relacional.


Formas normales

Las formas normales son estructuras organizativas de los datos de una base de datos. La normalización persigue varios proósitos: 1) eliminar datos redundantes; 2) restringir las operaciones no permitidas; 3) asegurar la consistencia para que las dependencias lógicas entre los datos tengan sentido.
Limitaciones del modelo relacional

La restricción del universo de posibles elementos a tablas (bidimensionales) es una gran limitación conceptual a priori. Además el término “relación” no es muy adecuado, pues es demasiado genérico como para aplicarlo a tablas, que son estructuras de datos específicas.

Y como tablas también hay limitaciones: Respecto al SQL, el lenguaje estándar de acceso a bases de datos relacionales, hay varios inconvenientes importantes:
Especificación en MENTAL

Relación como conjunto de conjuntos

Una relación R se puede especificar como un conjunto de filas, donde cada fila es a su vez un conjunto de atributos. Por ejemplo, la tabla Empleados se puede especificar así:

( R = {
{E001/Empleado Juan/Nombre Pérez/Apellido1 Gómez/Apellido2 Madrid/Ciudad}

{E002/Empleado Luis/Nombre Fernández/Apellido1 Pin/Apellido2 Barcelona/Ciudad}

{E003/Empleado Pedro/Nombre Ruiz/Apellido1 Llamas/Apellido2 Valencia/Ciudad}

{E004/Empleado Ramón/Nombre Ruiz/Apellido1 Rodríguez/Apellido2 Alicante/Ciudad}
} )


En general,

( R = { {v11/A1 ... v1m/Am} ... {vn1/A1 ... vnm/Am} } )

en donde vij es el valor de la entidad de orden i y atributo de orden j, y Aj el nombre del atributo de orden j.

La cardinalidad de R es R# = n (número de filas), y su grado es A# = m, siendo A el conjunto de los nombres de los atributos: (A = {A1…Am}).


Relación como función extensiva

Una relación R (tabla bidimensional) se puede considerar un conjunto de relaciones básicas o elementales formadas por 3 elementos: la clave c (el identificador de una entidad), un atributo a de esa entidad y un valor v de ese atributo. Esta relación se expresa como una función extensiva de dos parámetros (c y a) y de resultado v: Por ejemplo, en la relación Empleados, la primera tupla se puede codificar como conjunto así: Para no tener que repetir los nombres de los atributos en cada tupla, podemos especificar : En general, { [( R(c A) = [⌊valores de los atributos⌋ )] siendo c la clave de la entidad correspondiente, ( A = [A1…Am] ) y A1…Am los nombres de los atributos.


Las cinco operaciones básicas del modelo relacional
  1. Unión de dos relaciones R1 y R2: R1∪R2 (unión de conjuntos).

    R1 y R2 deben estar definidas como conjuntos de conjuntos.

  2. Diferencia de dos relaciones R1 y R2: (R1 ∪' R2) (diferencia entre conjuntos).

    R1 y R2 deben estar definidas también como conjuntos de conjuntos.

  3. Producto cartesiano de las relaciones R1 y R2.

    ⟨( R1×R2 = {[ [R1↓]∪[R2↓] ]} )⟩

    R1 y R2 deben estar definidas también como conjuntos de conjuntos.

    El grado resultante es (A1# + A2#). Y su cardinalidad es (R1#)*(R2#).

    A1 y A2 son los conjuntos de atributos de R1 y R2, respectivamente.

  4. Proyección de la relación R respecto al subconjunto de atributos B⊂A, siendo A el conjunto de los nombres de los atributos de R.

    Si definimos la relación R como función extensiva, la expresión es:

    ⟨( Proy(R c B) = {⟨([R(c [B↓]])] )⟩ o bien

    ⟨( Proy(R c B) = {⟨(R(c x) ← xB))⟩} )⟩

    Ejemplo:


  5. Selección de tuplas de R mediante un criterio de selección s.

    La relación R debe estar definida como conjunto de conjuntos.

    ⟨( Selec(R s) = Rs )⟩

    Por ejemplo,


Las siete operaciones derivadas
  1. Intersección de dos relaciones R1 y R2: R1∩R2 (intersección de conjuntos).

    R1 y R2 deben estar definidas como conjuntos de conjuntos.

  2. Unión natural de dos relaciones R1 y R2.

    ⟨( UnionNat(R1 R2) = {[([R1↓] ∪ [R2↓]) ← (R1∈R2)]} )⟩

    R1 y R2 deben estar definidas como conjuntos de conjuntos.

    Automáticamente se eliminan los atributos-valores duplicados.

  3. Unión exterior (Outer Join).

    1. ⟨( (R1 ]×| R2) = {[([R1↓] ∪ [R2↓]) ← (R1R2) →' θ)]} )⟩

    2. ⟨( (R1 |×[ R2) = (R2 ]×| R1) )⟩

    3. ⟨( (R1 ]×[ R2) = ((R1 ]×| R2) ∪ (R1 |×[ R2)) )⟩

  4. División de dos relaciones R1 y R2.

    (C = A(R2)) // conjunto de atributos de R2
    (X1 = Proy(R C))
    (X2 = Proy((R2×X1 − R1) C))
    (R1¸R2 = (X1 − X2))


  5. Asignación.

    Se realiza mediante una expresión de sustitución, inmediata, diferida o inicial:

    ( nombre = expresión ) // sustitución inmediata
    ( nombre =: expresión ) // sustitución diferida
    ( nombre := expresión ) // sustitución inicial


  6. Renombrar.

    Es equivalente a la anterior.

  7. Actualización.

    Permite actualizar un valor de una tupla (R(c a) = v).

Bases de datos multidimensionales

En MENTAL, la generalización de las tablas (bidimensionales) a relaciones multidimensionales es muy simple, pues basta con considerar funciones de más de dos argumentos. La expresión general es siendo c1 … cn las claves asociadas a cada dimensión.

Por ejemplo, en el caso de la relación 3D de ventas de productos, la relación definida como función se compone de un conjunto de términos de la forma Abreviadamente,
OLAP

La flexibilidad de MENTAL permite realizar procesos de análisis de bases de datos de una manera sencilla e intuitiva.

Ejemplos para la relación 3D de ventas de productos:
  1. Total de productos vendidos en España del producto P001 en el año 2014:

    +⊣{⟨( V(p z a) ← (p=P001 ∧ z=España ∧ a=2014) )⟩)}

  2. Productos que se han vendido en España en 2014 más de 5 unidades:

    (⟨ (p ← (V(p z a) > 5)∧(z=España)∧(a=2014) ⟩)

  3. Producto más vendido en España en los años 2000 a 2014 (puede haber varios productos con la misma cantidad de ventas):

    ⟨ (Vmax(a) := 0) ⟩ // valor inicial del nro. de productos vendidos en el año

    ⟨( (V(p z a) > Vmax(a)) → (Vmax(a) = V(p z a)) ) ⟩)

    (⟨ Pmax(a) = {⟨p ← V(p z a) = Vmax(a) ⟩) // productos más vendidos en el año

    (años = [2000…2014])
    [(años Pmax(años))]

Ventajas de MENTAL como Sistema de Gestión de Base de Datos Relacional (SGBDR)

MENTAL es un lenguaje válido para expresar relaciones (tablas bidimensionales) y realizar las operaciones (básicas y derivadas) del modelo relacional. Además, con MENTAL se pueden superar las limitaciones del modelo relacional, al aportar generalidad y flexibilidad para relajar las restricciones impuestas por este paradigma: soportar objetos jerárquicos, compartir expresiones, interrelacionar expresiones, realizar selecciones avanzadas (por tipos, por niveles jerárquicos, etc.), agrupar atributos, etc.

Adenda

Breve historia del modelo relacional

El modelo relacional de base de datos nació en Junio de 1970, cuando Edgar Frank Codd (cuando trabajaba en IBM) publica un artículo titulado “A Relational Model of Data for Large Shared Data Banks” en la revista Communications of the ACM, que aportó una nueva visión de los datos como tablas bidimensionales, acompañado de un sólido fundamento teórico: el álgebra relacional.

El modelo relacional es considerado uno de los grandes logros técnicos del siglo XX. Codd formalizó un campo que hasta entonces era una colección desestructurada de productos y técnicas ad hoc y la convirtió en una disciplina científica teórica con aplicación práctica. Se puede decir que todos los SGBDs están basados en las ideas de Codd. Codd es considerado el padre de las bases de datos relacionales.

Posteriormente, Codd presentó otro lenguaje basado en la lógica de predicados de primer orden, mostrando que era equivalente en poder expresivo al álgebra relacional. A este segundo lenguaje lo denominó “cálculo relacional”, un lenguaje no procedural (especifica el “qué”, no el “cómo”). En cambio, el álgebra relacional es un lenguaje procedural, pues el cálculo de una nueva relación se hace especificando las operaciones a realizar y el orden en que deben hacerse.

Otros eventos destacados fueron:
La generalización del modelo relacional

Ha habido varios intentos de resolver estos problemas, introduciendo cierta generalidad y flexibilidad en el modelo relacional, relajando las restricciones impuestas por la 1NF. Actualmente se tiende a la NF2 (not first normal form), en la que se permite agrupar atributos y valores, compartir datos o relaciones, etc.

He aquí algunos de los llamados modelos post-relacionales:
Bibliografía